// src/stores/user.ts
import { defineStore } from 'pinia';

export const useUserStore = defineStore('user', {
  state: () => ({
    // 初始化时：从本地存储读取，实现刷新恢复状态
    token: localStorage.getItem('token') || null,
    userInfo: JSON.parse(localStorage.getItem('userInfo') || 'null'),
    // isLogin 基于 token 存在性判断（无需单独存本地存储，更可靠）
    isLogin: !!localStorage.getItem('token'),
  }),

  actions: {
    // 登录成功：更新状态 + 同步本地存储
    async login(params) {
      const res = await loginApi(params); // 调用登录接口
      const { token, userInfo } = res.data;

      // 更新 Pinia 状态（响应式）
      this.token = token;
      this.userInfo = userInfo;
      this.isLogin = true; // 标记已登录

      // 同步到本地存储（持久化）
      localStorage.setItem('token', token);
      localStorage.setItem('userInfo', JSON.stringify(userInfo));
    },

    // 退出登录：清除状态 + 本地存储
    logout() {
      this.token = null;
      this.userInfo = null;
      this.isLogin = false; // 标记未登录

      // 清空本地存储
      localStorage.removeItem('token');
      localStorage.removeItem('userInfo');
    },

    // 页面刷新时：强制恢复状态（可选，应对极端情况）
    restoreState() {
      const token = localStorage.getItem('token');
      const userInfo = JSON.parse(localStorage.getItem('userInfo') || 'null');
      this.token = token;
      this.userInfo = userInfo;
      this.isLogin = !!token; // 重新计算 isLogin
    },
  },
});